perm filename N[NEW,LCS] blob
sn#319866 filedate 1977-12-08 generic text, type T, neo UTF8
00100 C***** SUBRS NOTES, BMX, ACSHFT ***********
00200
00300 SUBROUTINE NOTES
00400 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
00500 COMMON/SCX/RHY(4),JALPHA(30),JX,RA,JZ,IRHY,RB,KA,KB,IZ
00600 COMMON /XRN/RN(2000) /DPY/ST(4000),WDS(250),MEDIT,GO
00700 COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,
00800 1 IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA /ALF/CLF,JQX,D,
00900 1 KQ,JG,X,ACC,STMDR,Y,LL,RZ,RC,INP(61) /POS/POS1,POS2,R4
01000 1 /FRMT/F78F(1),FA1(1),FA5(1),ASK
01100 COMMON/RINP/R(10,80),RPOS(2,50) /RMOD/RMODE2,SET4,IBEAM,
01200 1 NOSET,STEM,STUP,NTC,PS2,RAM,RDD,ITB,POSB
01300 DATA ACMV/2.3/
01400 RMODE=0
01500 IF(RMODE2.GE.500)RMODE=RMODE2
01600 C RMODE2≥500 IS FOR USER-ADDED NOTE AND REST ROUTINE (SUBR EXTRA)
01700 CP POS1=0
01800 CP POS2=200
01900 STFLG=0
02000 444 FORMAT(' TYPE POS1, POS2, (SPC) '$)
02100 CALL SETUP
02200 IF(STUP.GE.0)GO TO 8
02300 CC IF(ST(3601).GE.0)GO TO 8
02400 C ST(3601) IS LOC. OF RPOS(1,1)
02500 C SKIPS IF USING SETUP ON SOME STAFF
02600 IF(POS2.NE.0)GO TO 4334
02700 C JUMP IF POS1, POS2, ETC. WERE SET UP IN FILE (* SP ST POS1 POS2 X)
02800 4333 TYPE 444
02900 ACCEPT F78F,POS1,POS2,R4
03000 C DON'T USE INVIS. RESTS WITH SPACING FEATURE!!!!
03100 IF(POS2.EQ.0)POS2=200.
03200 IF(POS1.GE.POS2)GO TO 4333
03300 C TYPE ANY POSITIVE 3RD NUM. FOR PSUEDO-FIBONACCI SPACING OF RHYTH.
03400 4334 STUP=STUP-R4
03500 8 KN=0
03600 IRHY=0
03700 C IZ=# OF ITEMS FROM SCANR*******
03800 IZ=I-1
03900 C LIMIT OF 100 ITEMS***** 4/74 *****
04000 CLF=0
04100 KCLF=0
04200 JCLF=0
04300 C DEFAULT IS ALWAYS TREBLE CLEF
04400
04500 IF(POS2.NE.0)GO TO 71
04600 POS2=200
04700 71 K=IZ+1
04800 DO 70 KQ=1,IZ
04900 X=V(KQ)
05000 IF(X.GE.0)GO TO 70
05100 IF(-X.LT.2000)K=K-1
05200 C TO GET THE RIGHT ITEM COUNT WITH CHORDS, ETC.
05300 70 CONTINUE
05400
05500 D=(POS2-POS1)/K
05600 C D WILL SPACE ALL ITEMS EVENLY FOR NOW
05700
05800 STEM=-1
05900 C K=COUNTER FOR USEFUL ITEMS (OMITS CLEFS)
06000 K=1
06100 KQ=1
06200 C LOOPS TO 7333
06300 7 JG=-1
06400 X=V(KQ)
06500 C notes = 1xyz.0 x=accidental, yz=note num., negative=chord note
06600 C rest = 2xyz.0 z=0=ordinary, =1=invis., =2=whole, =3=repeat bar
06700 C =4=down, =5=up, -2xyz=num. of meas. rest
06800 C clefs = 3xyz.0 z=0=treble, =1=bass, =2=alto, =3=tenor, neg.=invis.
06900 C bars = 4xyz.0 z=num. of staves up, neg.=dbl.bar
07000 C ksig = 17xyz.0 z=num. of accis., pos.=#, neg.=b
07100 C meter = 18xyz.n xy=top num, zn=bottom num (DONE IN SCMSS)
07200 C stem = 5xyz.0 YZ=10=stem up, =20=stem down
07300 C staff = 5xyz.0 z=0=return to norm., =1=lower stf., =2=upper stf.
07400
07500 IF(X)GO TO 27
07600 C NEXT SORTS OUT ORDER OF CHORD
07700 RZ=V(KQ+1)
07800 IF(RZ.GT.0)GO TO 27
07900 IF(ABS(RZ).GE.2000)GO TO 27
08000 C SKIPS NON-NOTES
08100 327 RZ=AMOD(X,100.0)
08200 57 LL=KQ
08300 Y=0
08400 RA=RZ
08500 37 LL=LL+1
08600 STMDR=RA
08700 RA=-V(LL)
08800 IF(RA)GO TO 27
08900 C EXITS WITH NON-NOTES OR NON-CHORD NOTES.
09000 RA=AMOD(RA,100.0)
09100 C GETS RID OF ACCI. FOR NOW
09200 IF(RA.GE.99)GO TO 27
09300 IF(Y)127,97,67
09400 C Y IS STEM DIRECTION. -1=DOWN, 1=UP
09500 97 Y=RA-STMDR
09600 GO TO 37
09700 67 IF(RA.LT.RZ)V(LL)=V(LL)-7
09800 C TRAP FOR NOTE IN WRONG OCT. (CONFUSES STEM DIRECTION.)
09900 IF(RA.GE.STMDR)GO TO 37
10000 227 CALL EXCH(V(LL),V(LL-1))
10100 C NOW START OVER AGAIN
10200 GO TO 57
10300 127 IF(RA.GT.RZ)V(LL)=V(LL)+7
10400 IF(STMDR.GT.RA)GO TO 37
10500 GO TO 227
10600 27 R4=0
10700 R5=0
10800 R6=0
10900 R8=0
11000 DO 89 LL=2,10
11100 89 R(LL,K)=0
11200 C TO CLEAR END OF ITEM
11300 KODE=ABS(X)/1000
11400 IF(X.LT.0)GO TO 86
11500 C JUMP IF A CLEF OR BAR OR METER
11600 IF(KODE.LE.2)IRHY=IRHY+1
11700 C ADDS A RHYTHMIC UNIT
11800 C TO CLEAR LAST PARAMS IN SOME ITEMS LATER
11900 86 GO TO (21,22,23,24,25),KODE
12000 IF(KODE.EQ.17)GO TO 1700
12100 C NEXT IS FOR METERS
12200 L=(X-18000.)/10
12300 R5=L
12400 C GETS TOP NUM OF METER
12500 R6=AMOD(X,10.0)*10.0+.01
12600 GO TO 843
12700
12800 23 CLF=ABS(X)-3000.
12900 JCLF=CLF
13000 IF(X)GO TO 871
13100 C IS THE CLEF INVISIBLE?
13200 R5=CLF
13300 IF(KCLF)R4=R4+100
13400 C MINI CLEF AFTER 1ST REGULAR SIZE.
13500 KCLF=-1
13600 GO TO 843
13700
13800 25 Y=X-5000
13900 IF(Y.LT.10)GO TO 250
14000 C NEXT FOR STEM UP, DOWN
14100 C DOWN = 20 (5020), UP=10 (5010)
14200 STEM=Y
14300 GO TO 871
14400 250 STFLG=Y
14500 C STAFF ABOVE=2, BELOW=1, RESET=0
14600 GO TO 871
14700
14800 24 R4=ABS(X)-4000
14900 CALL NOZERO(R4)
15000 IF(X)R4=R4+1500
15100 C NEG =DBL BAR.
15200 GO TO 843
15300
15400 1700 R5=ABS(X)-17000.
15500 C KEY SIGS NEG=FLATS
15600 IF(X)R5=-R5
15700 R6=CLF
15800 GO TO 843
15900
16000 22 Y=ABS(X)-2000
16100 IF(X)GO TO 831
16200 IF(Y.EQ.0)GO TO 843
16300 C ORDINARY REST=0
16400 IF(Y.LT.4)GO TO 882
16500 C REST UP=5, DOWN=4
16600 R4=6
16700 IF(Y.EQ.4)R4=-R4
16800 GO TO 843
16900
17000 882 IF(Y.EQ.1)GO TO 885
17100 IF(Y.EQ.2)GO TO 886
17200 C NEXT FOR REPEAT SIGN
17300 R5=-4
17400 GO TO 887
17500
17600 885 R8=9999
17700 C ↑↑ FOR INVIS. REST
17800 GO TO 843
17900
18000 886 R8=-1
18100 C ↑ FOR WHOLE REST (ANY RHYTHM)
18200 887 R(9,K)=-1
18300 GO TO 843
18400
18500 831 R8=Y
18600 C NUMS OF BARS REST
18700 GO TO 887
18800
18900 21 R(10,K)=STFLG
19000 IF(X.GT.0)GO TO 210
19100 X=-X
19200 R8=-1
19300 C CHORD NOTE
19400 JG=0
19500 210 LL=X-1000
19600 C NOTES
19700 L=LL/100
19800 C THE ACCI.
19900 R5=L
20000 N=MOD(LL,100)-1
20100 C THE NOTE NUM.
20200 L=N/7
20300 C OCT. NUM HERE IS 1 .GT. THAN THAT TYPED. (OCT. 0 IS POSSIBLE NOW.)
20400 N=MOD(N,7)+1
20500 C ABSOLUTE NOTE NUM.
20600 KA=JCLF*12
20700 C THIS WILL ADJUST FOR CLEF NUM.
20800 IF(JCLF.GE.2)KA=JCLF*2+2
20900 R4=(L-4)*7+KA+N
21000 STMDR=10.
21100 IF(R4.GE.7)STMDR=20.
21200 CO IF(STEM.GT.0)STMDR=STEM
21300 IF(STEM.LE.0)GO TO 26
21400 STMDR=STEM
21500 C SHORTEN STEMS WHEN TURNED TO NON-STANDARD DIRECTION.
21600 CCC NO NO NO -- THIS USED ESLWHERE. R8=-1
21700 C FOR STEM DIRECTIONS - 'B' AND HIGHER HAVE STEMS DOWN.
21800 CO IF(JG)GO TO 3133
21900 C JUMP IF NOT DBLSTOP
22000 26 IF(JG.GE.0)GO TO 6
22100 C NEXT LENGTHENS STEMS FOR VERY HIGH OR VERY LOW NOTES.
22200 IF(STMDR.EQ.20)GO TO 16
22300 C NEXT FOR STEM UP
22400 IF(R4.LT.0)R8=-R4
22500 C STEMS OF VERY HIGH OR VERY LOW NOTES WILL ALWAYS TOUCH MIDDLE LINE
22600 GO TO 3133
22700 16 IF(R4.GT.14)R8=R4-14
22800 C SEE 'BEAMS' AT 143 FOR SIMILAR FEATURE
22900 GO TO 3133
23000 6 L=K-1
23100 IF(R(5,L).GE.10.)MX=L
23200 C MX=1ST NOTE OF CHRD
23300 STMDR=0
23400 L=K-MX
23500 IF(R4.LT.R(4,MX))L=-L
23600 R(7,MX)=L
23700 C L+=STEM UP, L-=STEM DOWN ... USED AT END OF NOTES.
23800 X=ABS(R(4,MX)-R4)-1.
23900 C EXTENDS THE STEM!
24000 C AFTER 1ST NOTE, ORDER MAY BE SCRAMBLED IN CHORDS. STEM OK.
24100 IF(X.LT.1.)X=1.
24200 IF(R(8,MX).LT.X)R(8,MX)=X
24300 3133 R5=R5+STMDR
24400
24500 843 R(4,K)=R4
24600 R(5,K)=R5
24700 R(6,K)=R6
24800 R(8,K)=R8
24900 CS R(2,K)=STAFF
25000 IF(JG)KN=KN+1
25100 R(3,K)=KN*D+POS1
25200 R(1,K)=KODE
25300 87 K=K+1
25400 871 KQ=KQ+1
25500 IF(KQ.LE.IZ)GO TO 7
25600
25700 IZ=K-1
25800 C IZ IS NOW REALLY THE NUMBER OF ITEMS TO BE PROCESSED
25900 C NEXT ADJUSTS PLACEMENT OF ACCIDENTALS AND 2NDS.
26000 K=1
26100 1 RX=R(7,K)
26200 IF(RX.EQ.0)GO TO 2
26300 IF(R(1,K).EQ.2.)GO TO 2
26400 C JUMP IF NO CHRD COMING
26500 IF(RX.GT.0)GO TO 3
26600 C JUMP IF STEM IS UP
26700 RA=R(5,K)
26800 IF(RA.LT.10)GO TO 277
26900 IF(RA.LT.20.)R(5,K)=RA+10.
27000 C PUTS STEM DOWN IF IT WASN'T
27100 277 L=K-RX
27200 C RX=TOTAL(-1) NOTES IN CHORD
27300 R(7,K)=0
27400 4 RA=R(4,K)
27500 RC=0
27600 C INTERVAL TO PREVIOUS NOTE
27700 C CHECK ON USE OF N ELSEWHERE
27800 N=K+1
27900 IF(K.LT.L)RC=RA-R(4,N)
30200 220 CALL ACSHFT(RX)
30300 C L=K-1=END OF CHORD; L-ABS(RX)=START OF CHORD; +RX=↑ -RX=↓
30400 GO TO 222
30500
30600 2 K=K+1
30700 222 IF(K.LE.IZ)GO TO 1
30800 R(1,K)=0
30900 END
31000
31100 SUBROUTINE BMX(RA)
31200 C RA=NUMB. OF TAILS
31300 COMMON/RINP/R(10,80),VQ(100)
31400 C VQ HOLDS TEMPORARY INFO RE. MULTIPLE BEAMS.
31500 COMMON E,F,G,H,RJQ(34),RB,VQX,JB,B,JV,JW /XRN/RN(2000)
31600 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
31700 COMMON /STF/RSTFAC(0/7),RSTJ2
31800 COMMON/SCX/RHY(4),JALPHA(30),JX,U,JZ,IRHY,JD,KA,KB,IZ
31900 COMMON /PTR/PWDS(250),ITEM,LL,IS,IX /SC/J,L,MK
32000 1 ,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,IXX,ISEMI,IQT
32100 1 ,VX(50),IAMP,K,KN,M,MODE,IBLA
32200 M=IS-12
32300 DO 1 L=KN,K
32400 1 VQ(L)=AMOD(R(7,L),10.0)
32500 VQ(K+1)=0
32600 C CLEARS IT FOR ROUTINE AT '3'
32700 JB=KN
32800
32900 6 DIS=0
33000 RB9=0
33100 DO 2 L=JB,K
33200 IF(VQ(L).LE.RA)GO TO 2
33300 C SKIP IF EQ. TO PRESENT BEAM
33400 RB=VQ(L)
33500 4 DO 11 JD=L,K
33600 VQX=VQ(JD)
33700 IF(VQX.GE.RB)GO TO 20
33800 IF(VQX.EQ.0)GO TO 11
33900 C VQX=0 ON NON-STEM NOTES OF CHORDS. (HENCE NO TAILS)
34000 21 B=10.
34100 IF(L.GT.KN)GO TO 13
34200 GO TO 16
34300 20 JV=JD
34400 IF(VQX.GT.RB)GO TO 21
34500 11 JW=JD
34600 B=20
34700 C FINDS NEED FOR BEAM TO LEFT
34800 16 B=B+RA
34900 DO 5 JE=1,6
35000 5 RN(JE+IS)=RN(JE+M)
35100 RN(7+IS)=RN(7+M)+RB-RA*2.
35200 C ADDS RIGHT NUM. OF BEAMS
35300 IF(L.NE.JV)GO TO 10
35400 IF(L.EQ.KN)GO TO 377
35500 IF(L.NE.K)GO TO 10
35600 377 B=-B
35700 C PARTIAL, UNATTACHED BEAM IS PLACED AUTOMATICALLY IN ITMSUB.
35800 GO TO 8
35900 13 IF(JV.GT.L)GO TO 14
36000 IF(R(7,L+1).LT.10)GO TO 15
36100 C NEXT FOR DOT ON FOLLOWING NOTE.
36200 DIS=10.
36300 GO TO 19
36400 15 DIS=20.
36500 C SHORT INNER BEAM TO LEFT OF STEM
36600 19 B=-RA
36700 GO TO 16
36800 14 DIS=30
36900 C LONG INNER BEAM
37000 JV=-JV
37100 GO TO 16
37200
37300 C PARTIAL BEAM IS ON RIGHT(+) OR LEFT(-). RBM IS LENGTH.
37400 10 IF(L.EQ.KN)GO TO 22
37500 IF(JV.GE.0)GO TO 17
37600 B=R(3,L)
37700 JV=-JV
37800 L=JV
37900 22 IF(VQ(JW+1).GT.VQ(JW))GO TO 17
38000 VQ(JW)=VQ(JW+1)
38100 JW=JW-1
38200 17 IF(L.NE.JB)GO TO 18
38300 IF(B.LT.20.)L=JV
38400 C PUTS BEAMS IN RIGHT PLACE.
38500 18 RC=R(10,L)
38600 IF(RC.EQ.0)GO TO 23
38700 RB=2.44*RSTJ2
38800 IF(ABS(R(4,L)).GE.100)RB=RB*.6
38900 C GET WIDTH OF NOTE FOR DISPLACEMENT
39000 CC18 RB9=R(3,L)
39100 IF(RC.EQ.2)RB=-RB
39200 RC=RB
39300 CCC B=B+RC
39400 23 RB9=RC+R(3,L)
39500 C THIS WILL BE POS.3
39600 DIS=RA+DIS
39700 C DISPLACES
39800 GO TO 8
39900 2 CONTINUE
40000 RETURN
40100 8 JB=JW+1
40200 C FINDS SIDE (L,R) FOR PARTIAL BEAM
40300 C FOR NEW DISPLACEMENT
40400 RN(IS+11)=-1
40500 IF(RB9+DIS.EQ.0)GO TO 31
40600 IF(DIS.LT.10)GO TO 32
40700 IF(DIS.LT.30)GO TO 33
40800 C INNER PARTIAL BEAM IS NEXT
40900 DIS=DIS-30
41000 GO TO 31
41100 32 IF(B.GE.20)GO TO 12
41200 DIS=B-10
41300 B=-1
41400 C -1 PICKS UP POS OF P3
41500 CC B=RN(3+M)
41600 GO TO 31
41700 12 DIS=B-20
41800 B=RB9
41900 RB9=-1
42000 C -1 IN P9 WILL PICK UP POS OF P6
42100 CC RB9=RN(6+M)
42200 C INNER BEAM ATTACHED TO LFT SIDE.
42300 GO TO 31
42400 33 B=-DIS
42500 DIS=0
42600 31 RN(8+IS)=B
42700 RN(9+IS)=RB9
42800 RN(10+IS)=DIS
42900 CALL UPDATE(9)
43000 C ADDED ANOTHER ITEM (PART. BEAM)
43100 IF(JB.LE.K)GO TO 6
43200 END
43300
43400 SUBROUTINE ACSHFT(RX)
43500 COMMON /XRN/RN(2000) /STF/RSTFAC(0/7),RSTJ2
43510 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
43600 COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA
43700 1,DBST,NFLG,IXX,ISEMI,IQT,F(50),IAMP,K,KN,M,MODE,IBLA
43800 COMMON/RINP/R(10,80),VQ(100)
43900 EQUIVALENCE (A,F(1)),(B,F(2)),(X,F(4)),
44000 1(Y,F(5)),(Z,F(6)),(JD,F(7)),(RN1,F(8)),(RH,F(9))
44100 Z=0
44200 L=K-1
44300 M=L-ABS(RX)
44400 JD=1
44500 RN1=99
44600 Y=-.23
44700 IF(RX.LT.0)GO TO 1
44800 L=M
44900 M=K-1
45000 JD=-1
45100 1 DO 2 N=M,L,JD
45200 C DOES IT HAVE AN ACCID?
45300 IF(AMOD(R(5,N),10.).EQ.0)GO TO 2
45400 A=0
45500 B=0
45600 IF(N.LT.L)A=R(6,N+1)
45700 IF(N.GT.M)B=R(6,N-1)
45800 IF(RN1.NE.99)GO TO 3
45900 C IS THIS THE FIRST ACCID?
46000 RN1=R(4,N)
46100 GO TO 6
46200 3 RH=R(4,N)
46300 IF(ABS(RH-RN1).LT.5)GO TO 4
46400 RN1=RH
46500 IF(Y.GT.0)Z=Z+.04
46600 C STOPS OCT., ETC. ACCIS BEING MOVED TO LEFT.
46700 Y=-.23+Z
46800 6 IF(A.EQ.20)GO TO 477
46900 IF(B.NE.20)GO TO 4
47000 477 Y=Z
47100 4 X=0
47200 IF(R(6,N).EQ.20)X=-.24
47300 IF(R(6,N).EQ.10)X=.24
47400 Y=Y+.23
47500 IF(X+Y.LT.1)GO TO 7
47600 RN1=RH
47700 Z=Z+.04
47800 Y=0
47900 IF(A.EQ.20)GO TO 677
48000 IF(B.NE.20)GO TO 577
48100 677 Y=.23
48200 C SO Y DOESN'T GET >1.
48300 577 Y=Y+Z
48400 7 X=X+Y
48500 IF(ABS(X-.04).LT..01)X=0
48600 IF(X.GE.0)GO TO 5
48700 Y=.23+Z
48800 X=Z
48900 5 R(5,N)=R(5,N)+X*RSTFAC(IFIX(STAFF))
48950 C SPACING OF ACCI. DEPENDS ON STAFF SIZE FACTOR AT THIS POINT
49000 2 CONTINUE
49100 END
49200
49300 SUBROUTINE TYPOUT
49400 COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,
49500 1 IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA /ALF/INP(72),ML
49600 DO 1 KK=72,1,-1
49700 1 IF(INP(KK).NE.IBLA)GO TO 2
49800 2 TYPE 3,MODE,(INP(J),J=1,KK)
49900 3 FORMAT(I2,4X,72A1)
50000 END